<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.9.0">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    
    <title>
        Java 对象的创建、引用、比较与销毁 |
        
        Darklovy</title>
    <meta name="description" content>
    <meta name="keywords" content>
    <meta name="HandheldFriendly" content="True">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <link rel="shortcut icon" href="/">
    <link rel="alternate" href="/atom.xml" title="Darklovy">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="description" content="Java 是一门面向对象的程序设计语言，对象是由类抽象出来的，所有的问题都通过对象来处理，对象可以操作类的属性和方法解决相应的问题。，所以了解对象的产生、操作和消亡是十分必要的。 对象的创建对象可以认为是在一类事物中抽象某一个特例可以通过这个特例来处理这类事物出现的问题。在 Java 语言中通过 new 操作符来创建对象。 准确地说可以在 java 语言中使用 new 操作符调用构造方法创建对象。">
<meta name="keywords" content="Java">
<meta property="og:type" content="article">
<meta property="og:title" content="Java 对象的创建、引用、比较与销毁">
<meta property="og:url" content="https://www.ttxxly.top/2019/01/08/Java-对象的创建、引用、比较与销毁/index.html">
<meta property="og:site_name" content="Darklovy">
<meta property="og:description" content="Java 是一门面向对象的程序设计语言，对象是由类抽象出来的，所有的问题都通过对象来处理，对象可以操作类的属性和方法解决相应的问题。，所以了解对象的产生、操作和消亡是十分必要的。 对象的创建对象可以认为是在一类事物中抽象某一个特例可以通过这个特例来处理这类事物出现的问题。在 Java 语言中通过 new 操作符来创建对象。 准确地说可以在 java 语言中使用 new 操作符调用构造方法创建对象。">
<meta property="og:locale" content="en">
<meta property="og:updated_time" content="2019-01-08T07:17:31.645Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Java 对象的创建、引用、比较与销毁">
<meta name="twitter:description" content="Java 是一门面向对象的程序设计语言，对象是由类抽象出来的，所有的问题都通过对象来处理，对象可以操作类的属性和方法解决相应的问题。，所以了解对象的产生、操作和消亡是十分必要的。 对象的创建对象可以认为是在一类事物中抽象某一个特例可以通过这个特例来处理这类事物出现的问题。在 Java 语言中通过 new 操作符来创建对象。 准确地说可以在 java 语言中使用 new 操作符调用构造方法创建对象。">

    <link href="https://fonts.googleapis.com/css?family=Inconsolata|Titillium+Web" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=Roboto+Mono" rel="stylesheet">
    <link href="//cdn.bootcss.com/node-waves/0.7.5/waves.min.css" rel="stylesheet">
    <link rel="stylesheet" href="/style.css">
    <script>
        function setLoadingBarProgress(num) {
            document.getElementById('loading-bar').style.width = num + "%";
        }
    </script>
</head>
</html>
<body>
  <div id="loading-bar-wrapper">
  <div id="loading-bar"></div>
</div>


  <script>setLoadingBarProgress(20)</script> 
  <header class="l_header">
	<div class='wrapper'>
		<div class="nav-main container container--flex">
			<a class="logo flat-box" href='/' >
				Darklovy
			</a>
			<div class='menu'>
				<ul class='h-list'>
					
						<li>
							<a class='flat-box nav-Home' href='/'>
								首页
							</a>
						</li>
					
						<li>
							<a class='flat-box nav-archives' href='/archives'>
								归档
							</a>
						</li>
					
						<li>
							<a class='flat-box nav-categories' href='/categories'>
								分类
							</a>
						</li>
					
						<li>
							<a class='flat-box nav-tags' href='/tags'>
								标签
							</a>
						</li>
					
						<li>
							<a class='flat-box nav-algorithm' href='https://book.algorithm.ttxxly.top/'>
								算法
							</a>
						</li>
					
						<li>
							<a class='flat-box nav-python' href='https://book.python.ttxxly.top/'>
								python
							</a>
						</li>
					
						<li>
							<a class='flat-box nav-about' href='/about'>
								关于
							</a>
						</li>
					
				</ul>
				<div class='underline'></div>
			</div>
			
				<div class="m_search">
					<form name="searchform" class="form u-search-form">
						<input type="text" class="input u-search-input" placeholder="Search" />
						<span class="icon icon-search"></span>
					</form>
				</div>
			
			<ul class='switcher h-list'>
				
					<li class='s-search'><a href='javascript:void(0)'><span class="icon icon-search flat-box"></span></a></li>
				
				<li class='s-menu'><a href='javascript:void(0)'><span class="icon icon-menu flat-box"></span></a></li>
			</ul>
		</div>
		
		<div class='nav-sub container container--flex'>
			<a class="logo" class="flat-box" href='javascript:void(0)'>
				Word of Forks
			</a>

			<ul class='switcher h-list'>
				<li class='s-comment'><a href='javascript:void(0)'><span class="icon icon-chat_bubble_outline flat-box"></span></a></li>
				<li class='s-top'><a href='javascript:void(0)'><span class="icon icon-arrow_upward flat-box"></span></a></li>
				<li class='s-toc'><a href='javascript:void(0)'><span class="icon icon-format_list_numbered flat-box"></span></a></li>
			</ul>
		</div>
	</div>
</header>
<aside class="menu-phone">
	<nav>
		
			<a href="/" class="nav-Home nav">
				首页
			</a>
		
			<a href="/archives" class="nav-archives nav">
				归档
			</a>
		
			<a href="/categories" class="nav-categories nav">
				分类
			</a>
		
			<a href="/tags" class="nav-tags nav">
				标签
			</a>
		
			<a href="https://book.algorithm.ttxxly.top/" class="nav-algorithm nav">
				算法
			</a>
		
			<a href="https://book.python.ttxxly.top/" class="nav-python nav">
				python
			</a>
		
			<a href="/about" class="nav-about nav">
				关于
			</a>
		
	</nav>
</aside>

    <script>setLoadingBarProgress(40);</script>
  <div class="l_body">
    <div class='container clearfix'>
      <div class='l_main'>
        <article id="post-Java-对象的创建、引用、比较与销毁"
  class="post white-box article-type-post"
  itemscope itemprop="blogPost">
	<section class='meta'>
	<h2 class="title">
  	<a href="/2019/01/08/Java-对象的创建、引用、比较与销毁/">
    	Java 对象的创建、引用、比较与销毁
    </a>
  </h2>
	<time>
	  Jan 8, 2019
	</time>
	
	</section>
	
		<section class="toc-wrapper"><ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#对象的创建"><span class="toc-number">1.</span> <span class="toc-text">对象的创建</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#访问对象的属性和行为"><span class="toc-number">2.</span> <span class="toc-text">访问对象的属性和行为</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#对象的引用"><span class="toc-number">3.</span> <span class="toc-text">对象的引用</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#对象的比较"><span class="toc-number">4.</span> <span class="toc-text">对象的比较</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#对象的销毁"><span class="toc-number">5.</span> <span class="toc-text">对象的销毁</span></a></li></ol></section>
	
	<section class="article typo">
  	<div class="article-entry" itemprop="articleBody">
    	<p>Java 是一门面向对象的程序设计语言，对象是由类抽象出来的，所有的问题都通过对象来处理，对象可以操作类的属性和方法解决相应的问题。，所以了解对象的产生、操作和消亡是十分必要的。</p>
<h3 id="对象的创建"><a href="#对象的创建" class="headerlink" title="对象的创建"></a>对象的创建</h3><p>对象可以认为是在一类事物中抽象某一个特例可以通过这个特例来处理这类事物出现的问题。在 Java 语言中通过 new 操作符来创建对象。 准确地说可以在 java 语言中使用 new 操作符调用构造方法创建对象。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Test test = <span class="keyword">new</span> Test();</span><br><span class="line">Test test = <span class="keyword">new</span> test(<span class="string">"a"</span>);</span><br></pre></td></tr></table></figure>
<h3 id="访问对象的属性和行为"><a href="#访问对象的属性和行为" class="headerlink" title="访问对象的属性和行为"></a>访问对象的属性和行为</h3><p>用户使用 new 操作符创建一个对象后，可以使用 “对象.类成员”来获取对象的属性和行为。对象的属性和行为在类中是通过类成员变量和成员方法的形式来表示的，所以当对象获取类成员时，也相应地获取了兑现的属性和行为。</p>
<p><strong>例子：展示对象是如何调用类成员的</strong><br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">TransferProperty</span></span>&#123;</span><br><span class="line">    <span class="keyword">int</span> i  = <span class="number">47</span>;    <span class="comment">//定义成员变量</span></span><br><span class="line">    </span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">class</span><span class="params">()</span></span>&#123;</span><br><span class="line">        System.out.println(<span class="string">"调用 call 方法"</span>);</span><br><span class="line">        <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">3</span>; i++)&#123;</span><br><span class="line">            System.out.println(i + <span class="string">""</span>);</span><br><span class="line">            <span class="keyword">if</span> ( i == <span class="number">2</span>)  &#123;</span><br><span class="line">                System.out.println(<span class="string">"\n"</span>);</span><br><span class="line">            )</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="title">TransferProperty</span><span class="params">()</span> </span>&#123;&#125;<span class="comment">//定义构造方法</span></span><br><span class="line">    </span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>&#123;</span><br><span class="line">        TransferProperty t1  = <span class="keyword">new</span> TransferProperty();  <span class="comment">//创建一个对象</span></span><br><span class="line">        TransferProperty t2 = <span class="keyword">new</span> TransferProperty();   <span class="comment">//创建另一个对象</span></span><br><span class="line">        t2.i = <span class="number">60</span>;  <span class="comment">//将类成员变量赋值为 60</span></span><br><span class="line">        <span class="comment">//使用第一个对象调用类成员变量</span></span><br><span class="line">        System.out.println(<span class="string">"第一个实例对象调用变量 i 的结果："</span>+ t1.i++);</span><br><span class="line">        t1.call();</span><br><span class="line">        <span class="comment">//使用第二个兑现调用类成员变量</span></span><br><span class="line">        System.out.println(<span class="string">"第二个实例对象调用变量 i 的结果："</span>+t2.i);</span><br><span class="line">        t2.call();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p>
<h3 id="对象的引用"><a href="#对象的引用" class="headerlink" title="对象的引用"></a>对象的引用</h3><p>在 Java 语言中尽管一切都可以看做对象，但真正操作标识符实质上是一个引用，那么引用在 Java 中应该如何体现？</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">类名 对象引用名称</span><br></pre></td></tr></table></figure>
<p>如一个 Book 类的引用可以使用一下代码：<br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Book book;</span><br></pre></td></tr></table></figure></p>
<p>通常一个引用不一定需要有一个对象相关联。引用于对象相关联的语法如下：<br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Book book = <span class="keyword">new</span> Book();</span><br></pre></td></tr></table></figure></p>
<h3 id="对象的比较"><a href="#对象的比较" class="headerlink" title="对象的比较"></a>对象的比较</h3><p>在 Java 语言中有两种对象的比较方式，分别为“==”运算符和 equals() 方法。实质上这两种方式有着本质的区别。</p>
<p><strong>说明 == 和 equals 方法的区别</strong><br><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Compare</span> </span>&#123;</span><br><span class="line">    </span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>&#123;</span><br><span class="line">        String c1 = <span class="keyword">new</span> String(<span class="string">"abc"</span>);</span><br><span class="line">        String c2 = <span class="keyword">new</span> String(<span class="string">"abc"</span>);</span><br><span class="line">        String c3 = c1 ;</span><br><span class="line">        <span class="comment">//使用“==”运算符比较 c2 和 c3</span></span><br><span class="line">        System,out.println(<span class="string">"c2==c3的运算结果为："</span>+(c2 == c3));</span><br><span class="line">        <span class="comment">//使用 </span></span><br><span class="line">            </span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p>
<h3 id="对象的销毁"><a href="#对象的销毁" class="headerlink" title="对象的销毁"></a>对象的销毁</h3><p>每个对象都有生命周期，当对象的生命周期结束时，分配给该对象的内存地址将会被回收。在其他语言中需要手动回收废弃的对象，但是 Java 拥有一套完整的垃圾回收机制，用户不必担心废弃的对象占用内存，垃圾回收期将回收无用的但占用内存的资源。</p>
<p>在谈到垃圾回收机制之前，首先需要了解何种对象会被Java虚拟机视为垃圾。主要包括以下两种情况。</p>
<ul>
<li>对象引用超过其作用范围，这个对象将被视为垃圾。</li>
<li>将对象赋值为 null</li>
</ul>
<p>虽然垃圾回收机制已经很完善，但垃圾回收期只能回收那些由 new 操作符创建的对象。如果某些对象不是通过 new 操作符在内存中获取一块内存区域，这种对象可能不能被垃圾回收机制所识别，所以在 Java 中提供了一个 finalize() 方法。</p>
<p>这个方法是 Object 类的方法，它被声明为 protected，用户可以在自己的类中定义这个方法。如果用户在类中定义了 finalize() 方法，在垃圾回收时会搜狐先调用该方法，在下一次垃圾回收动作发生时，才能真正回收被对象占用的内存。</p>
<p><strong>有一点需要明确的是，垃圾回收 或 finalize() 方法不保证一定会发生，如 Java 虚拟机内存损耗殆尽时，它是不会执行垃圾回收的。</strong> </p>

  	</div>
	  
	  <div class="article-tags tags">
      
        <a href="/tags/Java/">Java</a>
      
	  </div>
    
		
	
		<div class="art-item-footer">
				
					<span class="art-item-left"><i class="icon icon-chevron-thin-left"></i>prev：<a href="/2019/01/09/java-包装类/" rel="prev"  title="java 包装类">
						java 包装类 
					</a></span>
				
				
					<span class="art-item-right">next：<a href="/2019/01/08/Java-类的主方法/" rel="next"  title="Java 类的主方法">
						Java 类的主方法
					</a><i class="icon icon-chevron-thin-right"></i></span>
				
		</div>
	
	</section>
	
</article>
<script>
	window.subData = {
		title: 'Java 对象的创建、引用、比较与销毁',
		tools: true
	}
</script>

      </div>
      <aside class='l_side'>
        
  <section class='m_widget links'>
<div class='header'>Links</div>
<div class='content'>
    <ul class="entry">
    
        <li><a class="flat-box" target="_blank" href="https://iiong.com/">
            <div class='name'>淮城一只猫</div>
        </a></li>
    
    </ul>
</div>
</section>

  <section class='m_widget categories'>
<div class='header'>Categories</div>
<div class='content'>
    
    <ul class="entry">
    
        <li><a class="flat-box" href="/categories/Android基础/"><div class='name'>Android基础</div><div class='badget'>1</div></a></li>
    
    </ul>
    
</div>
</section>

  
<div class="m_widget tagcloud">
    <div class="header">Tags</div>
    <div class='content'>
        <a href="/tags/Android/" style="font-size: 14px; color: #808080">Android</a> <a href="/tags/HTML/" style="font-size: 14px; color: #808080">HTML</a> <a href="/tags/Java/" style="font-size: 20px; color: #000">Java</a> <a href="/tags/Python/" style="font-size: 14px; color: #808080">Python</a>
    </div>
</div>



      </aside>
      <script>setLoadingBarProgress(60);</script>
    </div>
  </div>
  <footer id="footer" class="clearfix">

	<div class="social-wrapper">
  	
      
        <a href="https://github.com/stkevintan" class="social github"
          target="_blank" rel="external">
          <span class="icon icon-github"></span>
        </a>
      
        <a href="https://twitter.com/kevinsfork" class="social twitter"
          target="_blank" rel="external">
          <span class="icon icon-twitter"></span>
        </a>
      
        <a href="/atom.xml" class="social rss"
          target="_blank" rel="external">
          <span class="icon icon-rss"></span>
        </a>
      
    
  </div>
  
  <div>Theme <a href='https://github.com/stkevintan/hexo-theme-material-flow' class="codename">MaterialFlow</a> designed by <a href="http://keyin.me/" target="_blank">Kevin Tan</a>.</div>
  
</footer>


  <script>setLoadingBarProgress(80);</script>
  

<script src="//apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script src='//cdn.bootcss.com/node-waves/0.7.5/waves.min.js'></script>
<script src="//cdn.bootcss.com/scrollReveal.js/3.3.2/scrollreveal.min.js"></script>
<script src="/js/jquery.fitvids.js"></script>
<script>
	var GOOGLE_CUSTOM_SEARCH_API_KEY = "";
	var GOOGLE_CUSTOM_SEARCH_ENGINE_ID = "";
	var ALGOLIA_API_KEY = "";
	var ALGOLIA_APP_ID = "";
	var ALGOLIA_INDEX_NAME = "";
  var AZURE_SERVICE_NAME = "";
  var AZURE_INDEX_NAME = "";
  var AZURE_QUERY_KEY = "";
  var BAIDU_API_ID = "";
  var SEARCH_SERVICE = "hexo";
  var ROOT = "/"||"/";
  if(!ROOT.endsWith('/'))ROOT += '/';
</script>
<script src="/js/search.js"></script>
<script src="/js/app.js"></script>


  <script>setLoadingBarProgress(100);</script>
</body>
</html>
